export const name = 'xhyk-vue'

export const jumpRoute = {
  path: '/:pathMatch(.*)*',
  redirect: to => {
    // TODO: Warn(2024-09-14 14:58 by xhyk)：修改的话，标签页导航的tabDropItem组件和下面的beforeEach都要修改
    return `/jumpRoute?toFullPath=${encodeURIComponent(to.fullPath)}&toPath=${encodeURIComponent(to.path)}`
  }
}


// region 设置菜单

/*{
      // 主键ID，最大长度60字符
      id: "1",
      // 组件名称，最大长度255字符，用于是否keep-alive
      name: "ruleMenu",
      // 标题，最大长度255字符
      title: "规则管理",
      // 国际化标题，最大长度255字符
      i18Text: "",
      // 菜单类型，0：菜单，1：编辑页，2：API
      menuType: 0,
      // 图标
      icon: "Connection",
      // 权限，最大长度255字符
      power: "",
      // 前端Vue组件地址（微前端时无效）
      componentPath: "",
      // 前后端路由，最大长度255字符
      path: "",
      // 父级菜单ID，最大长度60字符
      parentId: "",
      // 菜单标签页是否固定
      fixedTab: false,
      // 排序。值越大越前
      sort: 100,
      // 微前端强制刷新。整个页面重新加载，推荐使用监听refresh事件，进行局部更新
      refresh: true,
      // 微前端路径
      wPath: 'https://www.bilibili.com/'
    }
*
* */

// export async function setSysMenu() {
//   if (typeof xhykOptions.menuCallBack == 'function') {
//     window.$piniaTheme.menuListParams = await xhykOptions.menuCallBack()
//   } else {
//     window.$piniaTheme.menuListParams = []
//   }
//   return window.$piniaTheme.menuListParams
// }

// endregion


// region 主题

// 加深
function darkenColor(color, red, green = undefined, blue = undefined, opacity = undefined) {
  // 将十六进制颜色值转换为RGB颜色值
  const r = parseInt(color.substring(1, 3), 16)
  const g = parseInt(color.substring(3, 5), 16)
  const b = parseInt(color.substring(5, 7), 16)
  const o = parseInt(color.substring(7, 9), 16) || 255

  // 计算新的RGB颜色值
  let newR = r + (red != undefined ? red : 0)
  let newG = g + (green != undefined ? green : 0);
  let newB = b + (blue != undefined ? blue : 0);
  let opa = o + (opacity != undefined ? opacity : 0)

  if (newR < 0) {
    newR = 0
  } else if (newR > 255) {
    newR = 255
  }
  if (newG < 0) {
    newG = 0
  } else if (newG > 255) {
    newG = 255
  }
  if (newB < 0) {
    newB = 0
  } else if (newB > 255) {
    newB = 255
  }
  if (opa < 0) {
    opa = 0
  } else if (opa > 255) {
    opa = 255
  }

  // 将新的RGB颜色值转换为十六进制颜色值
  const newColor = `#${newR.toString(16).padStart(2, '0')}${newG.toString(16).padStart(2, '0')}${newB.toString(16).padStart(2, '0')}${opa.toString(16).padStart(2, '0')}`

  return newColor
}


export const setColorFn = () => {

  // 系统背景色
  const themeBgc = window.$piniaTheme.themeBgc
  document.documentElement.style.setProperty('--themeBgc', themeBgc);
  document.documentElement.style.setProperty('--themeBorder', themeBgc);

  // 菜单背景色
  let menuBgcColor = window.$piniaTheme.menuBgc
  document.documentElement.style.setProperty('--menuBgcColor', menuBgcColor);

  // 导航菜单背景色
  const menuBgc2 = darkenColor(menuBgcColor, -20, -20, -20, 0)
  document.documentElement.style.setProperty('--menuBgcColor2', menuBgc2);


  // region 字体色

  // 字体色
  const menuColor = window.$piniaTheme.menuC
  document.documentElement.style.setProperty('--menuFontColor', menuColor);

  // 非活跃的字体色
  const menuActiveColor = darkenColor(menuColor, -20)
  document.documentElement.style.setProperty('--menFontNoColor', menuActiveColor);

  // endregion


  // 当前系统配色
  const sysColor = window.$piniaTheme.sysColor
  document.documentElement.style.setProperty('--menuSysColor', sysColor);
  // 按钮边框色
  document.documentElement.style.setProperty('--el-color-primary-light-7', sysColor);
  // 字体色
  document.documentElement.style.setProperty('--el-color-primary', sysColor);

  // 父级背景色
  const fatherBgc = darkenColor(sysColor, -20)
  document.documentElement.style.setProperty('--menuFahterBgc', fatherBgc);

  // 系统浅配色色
  const sysColor2 = darkenColor(sysColor, 0, 0, 0, -180)
  document.documentElement.style.setProperty('--menuSysColor2', sysColor2);
  // 按钮背景色
  document.documentElement.style.setProperty('--el-color-primary-light-9', sysColor2);

  let sysColor3 = darkenColor(sysColor, 0, 0, 0, -140)
  document.documentElement.style.setProperty('--menuSysColor3', sysColor3);

  let sysColor4 = darkenColor(sysColor, 0, 0, 0, -50)
  document.documentElement.style.setProperty('--menuSysColor4', sysColor4);

  let sysColor5 = darkenColor(sysColor, 0, 0, 0, -228)
  // let sysColor5 = darkenColor(sysColor.value, 80, 80,80,)
  document.documentElement.style.setProperty('--menuSysColor5', sysColor5);

  let sysColor6 = darkenColor(sysColor, 5, -50, -50, 255)
  document.documentElement.style.setProperty('--menuSysColor6', sysColor6);


  // 鼠标进入时
  // document.documentElement.style.setProperty('--el-color-primary-light-3', sysColor2.value);
  // 点击时
  // document.documentElement.style.setProperty('--el-color-primary-dark-2', sysColor.value);

  // document.documentElement.style.setProperty('--el-color-primary-dark-2', sysColor.value);

}


// 改变主题
export function changeTheme(theme = undefined) {
  if (theme == undefined) {
    theme = window.$piniaTheme.themeName
  }
  window.$piniaTheme.saveToLocal({
    themeName: theme
  })
  document.documentElement.dataset.theme = theme
  document.documentElement.classList.forEach(item => {
    document.documentElement.classList.remove(item)
  })
  document.documentElement.classList.add(theme)
}


// endregion


// region 国际化
export const changeLanguage = (newV) => {
  if (xhykOptions.i18n) {
    xhykOptions.i18n.global.locale = newV
  }
}

// endregion


// region 初始化

export const xhykOptions = {
  // 系统pinia缓存的前缀
  themePrefix: 'themeStore',

  // region 路由配置

  // 当找不到菜单或者无权限时，跳转的url
  notFoundUrl: '/404',

  // jumpRoute：跳转路由
  jumpRoute: "/jumpRoute",

  // 在jumpRoute中获取不到菜单时回调。接受一个菜单列表参数menuList，menuList有可能为undefined。返回false则拦截后面的跳转
  jumpRouteCallBack: undefined,

  // 获取不到菜单时跳转页面(登录路由)
  loginUrl: '/login',


  // 父级路由
  parentRouteName: 'mainIndex',

  // 不需要添加的路由
  blackRoute: ['shouYe'],

  // 哪些页面不需要生成导航标签的
  noMenuTag: ['/login','/jumpRoute'],

  // 菜单配置回调函数。返回undefined(此时根据文件夹生成路由)或列表（空列表代表无权限）
  menuCallBack: () => [],

  // 是否显示子级路由。配置微前端
  noMenuRoute: false,

  // endregion


  // region 菜单配置

  // 菜单标题
  title: 'xhyk管理系统',

  // logo图片
  logo: '',

  // 经典菜单的宽度
  menuWidth: 220,

  // 导航式菜单的父级宽度
  secondMenuFatherWidth: 70,

  // 导航式菜单的子级宽度
  secondMenuChildWidth: 200,

  // 弹出式菜单的宽度
  popupMenuWidth: 90,

  // setSysMenu: setSysMenu,
  // endregion


  // 设置路由对象
  setRouter(router, route) {
    window.$router = router
    window.$route = route
  },


  // region 导航栏信息

  // 导航栏按钮
  tabInfoBn: {
    // 显示，全屏
    noFull: false,
    // 是否显示搜索菜单
    noSearch: false,
    // 是否显示消息
    noNews: true,
    // 是否显示设置
    noSetting: false,
    // 是否暗黑主题
    noTheme: true,

    // 暂时没效果
    noThemeBgc: true,
  },

  setColorFn: setColorFn,

  changeLanguage: changeLanguage,
  // endregion

}

export const xhykInit = (app,router=undefined,
                         var_i18n = undefined,
                         defaultMixin = undefined,
                         optionsV = {}) => {

  for (let key in optionsV) {
    xhykOptions[key] = optionsV[key]
  }

  window.$xhykOptions = xhykOptions

  if (router != undefined){
    app.use(router)
  }
  if (var_i18n){
    app.use(var_i18n)
    xhykOptions.i18n = var_i18n
  }
  if (defaultMixin){
    app.mixin(defaultMixin)
  }
  window.$router = {
    push: (url) => {
      window.location.href = url
    },
    replace: (url) => {
      window.location.replace(url)
    }
  }

  return app
}

// endregion